home *** CD-ROM | disk | FTP | other *** search
- # Contributed by Noah Friedman.
-
- # To avoid using a function in bash, you can use the `builtin' or
- # `command' builtins, but neither guarantees that you use an external
- # program instead of a bash builtin if there's a builtin by that name. So
- # this function can be used like `command' except that it guarantees the
- # program is external by first disabling any builtin by that name. After
- # the command is done executing, the state of the builtin is restored.
- function external ()
- {
- local state=""
- local exit_status
-
- if builtin_p "$1"; then
- state="builtin"
- enable -n "$1"
- fi
-
- command "$@"
- exit_status=$?
-
- if [ "$state" = "builtin" ]; then
- enable "$1"
- fi
-
- return ${exit_status}
- }
-
- # What is does is tell you if a particular keyword is currently enabled as
- # a shell builtin. It does NOT tell you if invoking that keyword will
- # necessarily run the builtin. For that, do something like
- #
- # test "$(builtin type -type [keyword])" = "builtin"
- #
- # Note also, that disabling a builtin with "enable -n" will make builtin_p
- # return false, since the builtin is no longer available.
- function builtin_p ()
- {
- local word
-
- set $(builtin type -all -type "$1")
-
- for word in "$@" ; do
- if [ "${word}" = "builtin" ]; then
- return 0
- fi
- done
-
- return 1
- }
-